Applications access data bases contained in large storage arrays. The storage arrays usually access data in 512 byte blocks. However, other high end enterprise applications might access the storage arrays in 520 or 528 byte block sizes. This allows the software applications to include a checksum or Cyclic Redundancy Check (CRC) with the data. Other systems may use 4 thousand byte (KB) block sizes for simpler data storage and addressing. In some systems, the application is a storage application executing within a storage system providing data integrity without the knowledge of applications using the storage system.
The storage array may include an array of rotating disks and/or an array of solid state disk drives. Rotating disk drives and Solid State Flash Disk (SSD) drives have certain problems. Due to a logical or physical fault, data may not be successfully stored in the storage device. However, the storage device may unknowingly indicate the write operation was successful. Because there is no indication of the write failure, the data is not rewritten into the storage device, not rewritten into another storage location, and no other accommodations are made for the write failure. This creates problems in subsequent read operations when the storage media unknowingly supplies outdated or corrupted versions of the data.